import axios from 'axios';
import { Message } from 'element-ui';
import router from "@/router/index.js";
import utils from "@/config/utils";
// 1 、 规定所有的接口， result.code == 1  表示成功，其它的都是失败，并且失败的时候一定会返回一个 result.msg 告诉为什么失败
// 2 、 所以说标准的接口，应该具备三个数据 code 、 msg 、 data
// 3 、 如果存在分页，可以将data 解析为 data: { total:100,currpage:1,pagesize:10,list:[] } 格式
// 4 、 根据code == 1 表示成功。 定义其它比如 code == 2 表示登录信息(token)过期,此时应该提示重新登录，或者静默登录
// 5 、 一般其它code 状态，，前端直接报错，提示 msg 字段的内容，如果没有，直接提示服务器错误

var instance = axios.create({
    baseURL: '',
    timeout: 5000,
    headers: {
        'X-Custom-Header': 'foobar'
    }
});


// 添加请求拦截器
instance.interceptors.request.use(function(config) {
    // 在发送请求之前做些什么
    // 每次请求都为http头增加Authorization字段，其内容为token
    // if (store.state.user.token) {
    //     config.headers.Authorization = `token ${store.state.user.token}`;
    // }
    return config
}, function(error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
instance.interceptors.response.use(function(response) {
    // 对响应数据做点什么
    if (response.status == 200 || response.status == 304) {
        let res = response.data;
        if(res && res.code == 200){
            return Promise.resolve(res.data);
        }else if(res.code == 1003){
           // 登陆信息过期
           utils.clearUserId(); // 登陆过期，清除登陆信息
           router.push({
            path: "/login",
            query: {redirect: router.currentRoute.fullPath}// 将目的路由地址存入login的query中
           });
           
        }
        Message({
            message: res.msg || '服务器或网络错误',
            type: 'error'
        });
        return Promise.reject(res);
    } else {
        Message({
            message: '服务器或网络错误',
            type: 'error'
        })
        return Promise.reject(response)
    }
}, function(error) {
    // 对响应错误做点什么
    Message({
        message:"响应错误",
        type:"error"
    })
    return Promise.reject(error);
});


export default {
    get(url, params) {
        return instance.get(url, { params })
    },
    post: instance.post
}